实现Docker容器中安装配置Nginx
1. 启动进入容器
1.1 拉取centos镜像:docker pull centos
注意: 这样拉取的是最新的centos8镜像,如果想要拉取centos7则使用
docker pull centos:7
1.2 启动进入容器docker run -d --privileged --name nginx centos:v1 /usr/sbin/init
我这里起名为myNginx
, 名字都可以只要不和其他容器冲突就行docker exec -it 容器ID /bin/bash
进入容器
2. 在容器中安装Nginx
2.1 在容器中编辑/etc/yum.repos.d/nginx.repo设置yum源
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
2.2 yum install -y nginx安装
2.3 启动nginx
systemctl start nginx
systemctl enable nginx #设置开机自动启动
2.4 保存容器docker commit 容器ID nginx
3. 启动Nginx
3.1 启动容器docker run -d -p 80:80 --privileged nginx /usr/sbin/init
3.2 主机中使用浏览器访问虚拟机IP地址
4. 配置nginx主目录
4.1 进入nginx容器,查看/etc/nginx/nginx.conf文件
更改root目录
4.2 建立/var/webroot/www目录
编辑index.html文件
4.3 重新启动nginx服务并在主机使用浏览器访问
5. 配置Nginx错误页重定向
5.1 编辑/etc/nginx/nginx.conf文件,配置error_page指令指定404页面
5.2 在/var/webroot/www目录,编辑404.html文件
5.3 配置error_page 404 =200更改响应状态码
重启服务
6. 配置nginx访问控制权
6.1 在server块内增加deny all指令
6.2 使用location块进行访问控制
可以看到,当直接访问直接访问http://192.168.0.131/
deny拒绝
访问访问index.html页面
allow允许
原因:
http://192.168.0.131/
的结果是 403 Forbidden
,说明被匹配到location / {..deny all;}
了
原因很简单HTTP 请求 GET / 被“严格精确”匹配到了普通location / {}
,则会停止搜索正则location ;
http://192.168.0.131/index.html
结果是之前设置的index页面,说明没有被location / {…deny all;}
匹配,否则会 403 Forbidden。
但 /index.html 的确也是以“ / ”开头的,只不过此时的普通location /
的匹配结果是最大前缀
匹配,所以 Nginx 会继续搜索正则location , location ~ \.html$
表达了以.html
结尾的都allow all
; 于是接着就访问到了实际存在的index.html
页面。